/******************************************************************************
// * 文件名：AiP1640.c
// *   作者：WKX
// *   版本：1.0
// *   介绍：AiP1640 通用基础函数、初始化函数
******************************************************************************/

/* 头文件 -------------------------------------------------------------------*/
#include"AIP1640.H"

/* 宏定义 -------------------------------------------------------------------*/

/* 变量 ---------------------------------------------------------------------*/
 uint16_t  Aip1640_Rundata[Address_com_num] = {0};
/**
 * @funtion    Delay_us
 * @brief      US延时
 * @param[in]  无     
 * @param[out] 无
 * @return     无
 */
void Sys_Delay_us(unsigned int us)
{
    unsigned int x;
    x = us;
    while(x--)
    {
        _nop_();
        _nop_(); 
        _nop_();
        WDT_CLR;
    }
}
/**********************************************************
//	*	函数名称：1640开始函数
//	*	功		能：1640——START
//	*	参		数：无
//	*	返 回 值：无
***********************************************************/
void AiP1640_start(void)			//开始信号,SCL为高时，SDA下降沿
{													  
    SETBITS_DATA;
    Sys_Delay_us(1);
    SETBITS_CLK;
    Sys_Delay_us(1);
    RESETBITS_DATA;
    Sys_Delay_us(1);
    RESETBITS_CLK;
    Sys_Delay_us(1);
}
/**********************************************************
//	*	函数名称：1640停止函数
//	*	功		能：1640-STOP
//	*	参		数：无
//	*	返 回 值：无
***********************************************************/
void AiP1640_stop(void)			//停止信号,SCL为高时，SDA上升沿
{													
    Sys_Delay_us(1);
    RESETBITS_DATA;
    Sys_Delay_us(1);
    SETBITS_CLK;
    Sys_Delay_us(1);
    SETBITS_DATA;
}
/**********************************************************
//	*	函数名称：数据传输
//	*	功		能：写8bit数据
//	*	参		数：dat（发送到数据）
//	*	返 回 值：无
***********************************************************/
void AiP1640_write(unsigned char dat)	//写8bit数据
{
	uint8_t i;
    for(i=0; i<8; i++)
    {
        RESETBITS_CLK;
        Sys_Delay_us(1);
        if(dat & 0x01)
        {
            SETBITS_DATA;
        }
        else
        {
            RESETBITS_DATA;
        }
        Sys_Delay_us(1);
        SETBITS_CLK;
        dat >>= 1;
        Sys_Delay_us(1);
    }
    RESETBITS_CLK;
}
/**********************************************************
//	*	函数名称：驱动
//	*	功		能：初始化内部寄存器及显示数据
//	*	参		数：
//	*	返 回 值：
***********************************************************/
void AiP1640_driver(void)
{
    uint8_t i,Aip1640_Brightness;
    Aip1640_Brightness = 0x88;//默认开显示
    
    AiP1640_start();
    AiP1640_write(0X40);// 地址自动+1
    AiP1640_stop();
    
    AiP1640_start();
    AiP1640_write(0XC0);// 从00地址开始
    for(i = 0; i < Address_com_num; i++)
    {
        AiP1640_write(Aip1640_Rundata[i]);
    }
    AiP1640_stop();
    //亮度设置
    Aip1640_Brightness |= AIP1640_BRIGHTNESS_MAX;//最大亮度
    AiP1640_start();
    AiP1640_write(Aip1640_Brightness);//灰度显示
    AiP1640_stop();
}
